package com.ipan.builder.ognl;

import java.util.Map;

import com.ipan.builder.util.CompoundRoot;

/**
 * 值栈接口
 * 
 * @author iPan
 * @version 2013-11-30
 */
public interface ValueStack {
	public static final String VALUE_STACK = "com.ipan.builder.ognl.ValueStack";
	public static final String REPORT_ERRORS_ON_NO_PROP = "com.ipan.builder.ognl.ReportErrorsOnNoProp";

	 /**
     * 获取上下文.
     */
    public Map<String, Object> getContext();

    /**
     * 获取栈.
     */
    public CompoundRoot getRoot();

    /**
     * 设值（默认失败不会抛异常）.
     */
    public void setValue(String expr, Object value);

    /**
     * 设置，可以选择失败是否抛异常.
     */
    public void setValue(String expr, Object value, boolean throwExceptionOnFailure);

    /**
     * 通过OGNL表达式取值，指定目标类型（默认失败不会抛异常）；
     */
    public String findString(String expr);
    
    /**
     * 通过OGNL表达式取值，指定目标类型（可以选择是否抛异常）；
     */
    public String findString(String expr, boolean throwExceptionOnFailure);

    /**
     * 通过OGNL表达式取值，指定目标类型（默认失败不会抛异常）；
     */
    public Object findValue(String expr);

    /**
     * 通过OGNL表达式取值，指定目标类型（可以选择是否抛异常）；
     */
    public Object findValue(String expr, boolean throwExceptionOnFailure);

    /**
     * 通过OGNL表达式取值，指定目标类型（默认失败不会抛异常）；
     */
    public Object findValue(String expr, Class<?> asType);
    
    /**
     * 通过OGNL表达式取值，指定目标类型（可以选择是否抛异常）；
     */
    public Object findValue(String expr, Class<?> asType, boolean throwExceptionOnFailure);

    /**
     * 取栈顶.
     */
    public Object peek();

    /**
     * 出栈.
     */
    public Object pop();

    /**
     * 入栈.
     */
    public void push(Object o);

    /**
     * 栈大小.
     */
    public int size();
}
